package cn.taketoday.live.component;

import java.util.HashSet;
import java.util.Map;

import cn.taketoday.live.config.CenterSetConfig;
import cn.taketoday.live.config.settings.ThankGiftRuleSet;
import cn.taketoday.live.config.settings.ThankGiftSetConf;
import cn.taketoday.live.data.enums.ShieldMessage;

/**
 * @author BanqiJane
 */
public interface ThreadComponent {
  // 开启处理弹幕包线程 core
  void configureMessageHandler(Map<ShieldMessage, Boolean> messageControlMap,
                               CenterSetConfig centerSetConf);

  // 开启心跳线程 core
  void startHeartByteThread();

  // 开启日志线程
  void startLogThread();

  // 开启公告线程 need login
  void startAdvertThread(CenterSetConfig centerSetConf);

  // 开启自动回复线程 need login
  void startAutoReplyThread(CenterSetConfig centerSetConf);

  // 开启发送弹幕线程 need login
  void startSendBarrageThread();

  // 开启用户在线线程 need login
  void startUserOnlineThread();

  // 开启用户小心心线程
  void startSmallHeartThread();

  // 开启礼物屏蔽线程
  void startGiftShieldThread(String giftName, int time);

  // 开启关注屏蔽线程
//  boolean startFollowShieldThread(int time);

  //开启天选欢迎屏蔽线程

  void startWelcomeShieldThread(int time);

  // 开启public的礼物感谢线程
  void startParseThankGiftThread(ThankGiftSetConf thankGiftSetConf, HashSet<ThankGiftRuleSet> thankGiftRuleSets);

  // 开启public的关注感谢线程
//  void startParseThankFollowThread(ThankFollowSetConf thankFollowSetConf);



  // 设置公告线程 need login
  void setAdvertThread(CenterSetConfig centerSetConf);

  // 设置自动回复线程 need login
  void setAutoReplyThread(CenterSetConfig centerSetConf);

  // 关闭处理弹幕包线程 core
  void disableMessageHandler();

  // 关闭心跳线程 core
  void closeHeartByteThread();

  // 关闭用户心跳线程
  void closeSmallHeartThread();

  // 关闭日志线程
  void closeLogThread();

  void closeAdvertThread();

  void closeAutoReplyThread();

  void closeSendBarrageThread();

  void closeGiftShieldThread();

  void closeFollowShieldThread();

  void closeWelcomeShieldThread();

  // 关闭用户在线线程
  void closeUserOnlineThread();

}
